package com.wjw.java.games._event;

import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

/**
 * Java事件,小球移动案例：
 * 通过键盘的上下左右键,控制小球移动
 */
public class BollMove extends JFrame{//画框

    MyPanel mp = null;

    //初始化画框的同时,初始化画板
    public BollMove(){
        mp = new MyPanel();
        this.add(mp);//加入画板
        this.addKeyListener(mp);//绑定键盘事件,JFrame内可以监听键盘事件,即可以监听JPanel面板中的事件
        this.setSize(400,400);//屏幕大小
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口的同时关闭main线程
        this.setVisible(true);//可见
    }

    public static void main(String[] args) {
        BollMove bollMove = new BollMove();
    }
}

/**
 * 画板：可以画出小球
 * KeyListener：监听器,监听键盘事件
 */
class MyPanel extends JPanel implements KeyListener{

    //为了让小球可以移动,把它左上角的坐标(x,y)设置成变量
    int x = 10;
    int y = 10;

    //1.重写JPanel中的paint方法
    @Override
    public void paint(Graphics g) {
        super.paint(g);
        g.fillOval(x,y,20,20);//默认黑色
    }

    //2.重写KeyListener中的方法
    //2-1.有字符输出是,该方法就会触发
    @Override
    public void keyTyped(KeyEvent e) {

    }

    //2-2.当键盘上的某个键被按下时,触发
    @Override
    public void keyPressed(KeyEvent e) {
        int keyCode = e.getKeyCode();
        //System.out.println((char)keyCode+"被按下...");

        //根据用户按下的不同键,来控制小球移动的方向
        if(keyCode == KeyEvent.VK_DOWN){//下
            y++;
        }else if(keyCode == KeyEvent.VK_UP){//上
            y--;
        }else if(keyCode == KeyEvent.VK_LEFT){//左
            x--;
        }else if(keyCode == KeyEvent.VK_RIGHT){//由
            x++;
        }

        //然后重绘一下
        this.repaint();//会触发paint()方法,重新绘图
    }

    //2-3.当按下的某个键松开时,触发
    @Override
    public void keyReleased(KeyEvent e) {

    }


}